package com.jsz.yun.ai.field.util;


import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.signers.JWTSigner;
import cn.hutool.jwt.signers.JWTSignerUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * @author gaoxing
 * @date 2025-03-25 11:16:34
 */
public class TokenUtil {
    private static final String SECRET_KEY = "sunPing666";

    /**
     * 生成token
     * @param phoneNumber 手机号
     * @return token
     */
    public static String generateToken(String phoneNumber) {
        // 创建payload
        Map<String, Object> payload = new HashMap<>();
        payload.put(JWTPayload.SUBJECT, phoneNumber);
        payload.put(JWTPayload.ISSUED_AT, System.currentTimeMillis());
        payload.put(JWTPayload.EXPIRES_AT, System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000);
        // 创建signer
        JWTSigner signer = JWTSignerUtil.hs256(SECRET_KEY.getBytes());

        // 生成token
        return JWTUtil.createToken(payload, signer);
    }

    /**
     * 校验token
     * @param token token
     * @return 是否有效
     */
    public static boolean validateToken(String token) {
        try {
            JWT jwt = JWTUtil.parseToken(token);
            return jwt.verify(JWTSignerUtil.hs256(SECRET_KEY.getBytes()));
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 从token中获取手机号
     * @param token token
     * @return 手机号
     */
    public static String getPhoneNumberFromToken(String token) {
        JWT jwt = JWTUtil.parseToken(token);
        if (jwt.verify(JWTSignerUtil.hs256(SECRET_KEY.getBytes()))) {
            return (String) jwt.getPayload().getClaim(JWTPayload.SUBJECT);
        }
        return null;
    }
}
